package innerclass;

import static innerclass.InnerClassDemo.*;

/**
 * 外部类1
 * 内部类-成员内部类
 *
 * @author <a href="mailto:sjj@jianzhimao.com">mojo</a>
 * copyright (C), 2013-2022, 广州九尾信息科技有限公司
 * @date 2022/9/30 15:51
 */
public class OutClass1 {
    private static void anonymousMethod() {
        System.out.println(">>>>匿名内部类");
    }

    static class innerClass {
        public void m1() {
            System.out.println("m1方法。。。");
        }
    }

    public static void main(String[] args) {
        InnerClassDemo demo = new InnerClassDemo();
        // 普通内部类，使用外部类实例对象创建。普通类就是外部类的一个属性
        InnerClassDemo.NormalInnerClass normalInnerClass = demo.new NormalInnerClass();
        System.out.println("=================普通内部类调用外部方法======================");
        normalInnerClass.normalMethod();
        // 静态内部类，使用外部类名创建。静态内部类认为是外部类的静态属性
        InnerClassDemo.StaticInnerClass staticInnerClass = new InnerClassDemo.StaticInnerClass();
        System.out.println(InnerClassDemo.StaticInnerClass.field5);
        System.out.println("==================静态内部类调用外部静态方法===========================");
        staticInnerClass.innerMethod();
        AnonymousClass anonymousClass = () -> {
            System.out.println(f5);
        };
        anonymousClass.anonymousMethod();
        System.out.println("=============================================");
        // 匿名内部类的使用
        demo.anonymousMethodTest();
    }
}
